<?php

class Doctrine_Model_PromesasDao extends Doctrine_Model_BaseDao {

    public function obtenerTodos() {
        return $this->getEntityManager()
                        ->createQuery('select p from Doctrine_Model_Entities_Promesas t')
                        ->getResult();
    }

    public function obtenerPendientesDeHoy($sucursalId = null) {
        $hoy = new DateTime();

        $and_sucursal = "";
        if ($sucursalId):
            $and_sucursal = "AND s.id = {$sucursalId} ";
        endif;

        return $this->getEntityManager()
                        ->createQuery("SELECT p FROM Doctrine_Model_Entities_Promesas p "
                                . "JOIN p.usuario u "
                                . "JOIN u.sucursal s "
                                . "WHERE p.pendiente = 1 "
                                . "AND p.fechaVerificacionLaboral >= '" . $hoy->format('Y-m-d') . " 00:00:00' "
                                . "{$and_sucursal} ")
                        ->getResult();
    }

    public function obtenerEntreFechas($desde, $hasta) {

        return $this->getEntityManager()
                        ->createQuery("select p from Doctrine_Model_Entities_Promesas p where p.pendiente=0 and p.fechaPromesa >= '" . $desde . " 00:00:00' and p.fechaPromesa <= '" . $hasta . " 23:59:59'")
                        ->getResult();
    }

    public function obtenerEntreFechasPorSucursal_old($desde, $hasta, $sucursalId) {
        return $this->getEntityManager()
                        ->createQuery("select p from Doctrine_Model_Entities_Promesas p JOIN p.usuario u JOIN u.sucursal s  where p.pendiente=0 and p.fechaPromesa >= '" . $desde . " 00:00:00' and p.fechaPromesa <= '" . $hasta . " 23:59:59'  and s.id=" . $sucursalId)
                        ->getResult();
    }

    public function obtenerEntreFechasPorSucursal($desde, $hasta, $sucursalId) {
        return $this->getEntityManager()
                        ->createQuery("SELECT c FROM Doctrine_Model_Entities_Persona c JOIN c.promesas p JOIN p.usuario u JOIN u.sucursal s WHERE p.pendiente = 0 AND ((p.fechaPromesa >= '" . $desde . " 00:00:00' AND p.fechaPromesa <= '" . $hasta . " 23:59:59') OR (p.fechaVerificacionLaboral >= '" . $desde . " 00:00:00' and p.fechaVerificacionLaboral <= '" . $hasta . " 23:59:59')) AND s.id = " . $sucursalId)
                        ->getResult();
    }

    public function obtenerEntreFechasSinNegocio($desde, $hasta, $sucursalId = null) {
        $suc = "";
        if ($sucursalId) {
            $suc = ' AND s.id = ' . $sucursalId . " ";
        }
        return $this->getEntityManager()
                        ->createQuery("SELECT c.id,c.nroDocumento,c.apellido,c.nombres,p.fechaPromesa,p.fechaVerificacionLaboral,p.comentario,p.credito_id, u.id AS usuario_id FROM Doctrine_Model_Entities_Persona c JOIN c.promesas p JOIN p.usuario u JOIN u.sucursal s WHERE s.negocio = 0 AND p.pendiente = 0 AND ((p.fechaPromesa >= '" . $desde . " 00:00:00' AND p.fechaPromesa <= '" . $hasta . " 23:59:59') OR (p.fechaVerificacionLaboral >= '" . $desde . " 00:00:00' and p.fechaVerificacionLaboral <= '" . $hasta . " 23:59:59')) " . $suc)
                        ->getResult();
    }

    public function obtenerPorId($id) {
        return $this->getEntityManager()->find('Doctrine_Model_Entities_Promesas', $id);
    }

    public function guardar(Doctrine_Model_Entities_Promesas $promesa) {
        try {
            $this->getEntityManager()->persist($promesa);
            $this->getEntityManager()->flush();
            return true;
        } catch (Exception $e) {
            $logger = Zend_Registry::get('logger');
            $logger->log("Error PromesasDao - guardar: " . $e->getMessage(), Zend_Log::ERR);
            return false;
        }
    }

    public function eliminar(Doctrine_Model_Entities_Promesas $promesa) {
        try {
            $this->getEntityManager()->remove($promesa);
            $this->getEntityManager()->flush();
            return true;
        } catch (Exception $e) {
            $logger = Zend_Registry::get('logger');
            $logger->log("Error PromesasDao - eliminar: " . $e->getMessage(), Zend_Log::ERR);
            return false;
        }
    }

    public function obtenerUltimaPromesaAutogeneradaPorMora($credito_id) {
        return $this->getEntityManager()
                        ->createQuery("select p from Doctrine_Model_Entities_Promesas p  where p.credito_id=" . $credito_id . " and p.generadoPorMora=1 ORDER BY p.fechaPromesa desc")
                        ->setMaxResults(1)
                        ->getResult();
    }

    public function obtenerUltimaPromesaPorFechaPromesa($credito_id) {
        return $this->getEntityManager()
                        ->createQuery("select p from Doctrine_Model_Entities_Promesas p  where p.credito_id=" . $credito_id . "  ORDER BY p.fechaPromesa desc")
                        ->setMaxResults(1)
                        ->getResult();
    }

    public function obtenerUltimaPromesaPorFechaVerifLaboral($credito_id) {
        return $this->getEntityManager()
                        ->createQuery("select p from Doctrine_Model_Entities_Promesas p  where p.credito_id=" . $credito_id . "  and p.fechaVerificacionLaboral is  not null ORDER BY p.fechaVerificacionLaboral desc")
                        ->setMaxResults(1)
                        ->getResult();
    }

    public function obtenerUltimaPromesaNoAutogeneradaPorMora($credito_id) {
        return $this->getEntityManager()
                        ->createQuery("select p from Doctrine_Model_Entities_Promesas p  where p.credito_id=" . $credito_id . " and p.generadoPorMora is null ORDER BY p.fechaPromesa desc")
                        ->getResult();
    }

    public function obtenerUltimasPromesaAutogeneradaPorMora() {
        return $this->getEntityManager()
                        ->createQuery("select p from Doctrine_Model_Entities_Promesas p   where   p.generadoPorMora=1  ORDER BY p.fechaPromesa desc")
                        ->getResult();
    }

    public function obtenerUltimasPromesaAutogeneradaPorMoraSinRenovar($sucursalId = null) {

        $and_sucursal = "";
        if ($sucursalId):
            $and_sucursal = "AND s.id = {$sucursalId} ";
        endif;

        return $this->getEntityManager()
                        ->createQuery("SELECT p FROM Doctrine_Model_Entities_Promesas p "
                                . "JOIN p.usuario u "
                                . "JOIN u.sucursal s "
                                . "WHERE p.generadoPorMora = 1 "
                                . "AND p.renovado IS NULL "
                                . "{$and_sucursal}"
                                . "ORDER BY p.fechaPromesa DESC")
                        ->getResult();
    }

    public function obtenerUltimasPromesaAutogeneradaPorMoraDistinct() {
        return $this->getEntityManager()
                        ->createQuery("select Distinct p.credito_id from Doctrine_Model_Entities_Promesas p   where   p.generadoPorMora=1  ORDER BY p.fechaPromesa desc")
                        ->getResult();
    }

    public function obtenerTodasPorJuicio($juicioId) {
        return $this->getEntityManager()
                        ->createQuery("select Distinct p from Doctrine_Model_Entities_PromesaJuicio p JOIN p.juicio j  where   j.id=" . $juicioId . " ORDER BY p.fechaPromesa desc")
                        ->getResult();
    }

    public function eliminarTodos($sucursalId = null) {
        $where_sucursal = "";
        if ($sucursalId):
            $where_sucursal = "WHERE ap.sucursal_id = {$sucursalId}";
        endif;
        
        echo "DELETE FROM Doctrine_Model_Entities_AlertaDePromesas  {$where_sucursal}";
        
        return $this->getEntityManager()
                        ->createQuery("DELETE FROM Doctrine_Model_Entities_AlertaDePromesas ap  {$where_sucursal}")
                        ->getResult();
    }

}
